# pip install pymysql
# 导入PyMySQL库中的Connection类，用于建立数据库连接
# PyMySQL是纯Python实现的MySQL客户端库，用于连接和操作MySQL数据库
from pymysql import Connection
# 导入datetime模块，用于处理日期和时间数据
import datetime

# ========== 数据库连接配置 ==========
# 建立数据库连接
# Connection类用于创建与MySQL数据库的连接实例
# 参数说明:
# host: 数据库服务器地址，这里使用本地localhost
# port: 数据库端口号，MySQL默认端口为3306
# user: 数据库用户名，这里是root用户
# password: 数据库密码，这里是123456
conn = Connection(
    host='localhost',
    port=3306,
    user='root',
    password='123456'
)

# ========== 数据库操作 ==========
try:
    # 创建游标对象
    # cursor是数据库操作的指针，用于执行SQL语句和获取结果
    # 游标提供了一种从数据库中检索数据并逐行处理的方法
    cursor = conn.cursor()
    
    # 选择数据库
    # select_db()方法用于选择要操作的数据库
    # 这里选择名为"messageboard"的数据库进行操作
    conn.select_db("messageboard")
    
    # 查询数据
    # execute()方法用于执行SQL语句
    # fetchall()方法用于获取查询结果的所有行
    cursor.execute("SELECT * FROM message")
    results = cursor.fetchall()
    
    print("当前留言板数据:")
    # 遍历查询结果并打印每一行数据
    for result in results:
        print(result)
    
    # # 插入新数据示例
    # print("\n插入新数据...")
    # # 使用参数化查询防止SQL注入攻击
    # insert_sql = """
    # INSERT INTO message (name, email, content, create_time, update_time,deleted)
    # VALUES (%s, %s, %s, %s, %s,%s)
    # """
    # #
    # # 准备要插入的数据元组
    # # 包含留言者姓名、邮箱、内容、创建时间、更新时间和删除标记
    # new_message_data = (
    #     '测试数据',
    #     'test@example.com',
    #     '这是一条通过Python添加的测试留言',
    #     datetime.datetime.now(),  # 获取当前时间作为创建时间
    #     datetime.datetime.now(),  # 获取当前时间作为更新时间
    #     0  # 0表示未删除，1表示已删除
    # )
    # #
    # # 执行插入操作，将数据元组作为参数传入
    # cursor.execute(insert_sql, new_message_data)
    # #
    # # 提交事务，确认更改
    # # commit()方法用于提交当前事务，使更改永久生效
    # # 在执行修改数据库的操作后，必须调用commit()才能保存更改，或者再创建链接时设置自动执行commit()：conn = Connection(autocommit=True)
    # conn.commit()
    # print("新数据已成功插入数据库")
    # #
    # # 再次查询并显示所有数据
    # cursor.execute("SELECT * FROM message")
    # results = cursor.fetchall()
    # #
    # print("\n更新后的留言板数据:")
    # for result in results:
    #     print(result)
    #
# ========== 异常处理 ==========
except Exception as e:
    # 出现异常时回滚事务
    # rollback()方法用于回滚当前事务，撤销未提交的更改
    # 当操作过程中出现异常时，使用回滚可以保证数据的一致性
    conn.rollback()
    print(f"操作失败，已回滚: {e}")
    
# ========== 资源释放 ==========
finally:
    # 关闭游标和连接
    # close()方法用于关闭游标和数据库连接，释放资源
    # 这是良好编程习惯，避免资源泄露
    cursor.close()
    conn.close()